import sys
import os
from PIL import Image, ImageFont, ImageDraw

sys.path.append(os.path.join(os.getcwd(), 'src/'))
import main
import config

##
# @brief      显示图片对象的简单信息
##
# @param      im    必须是PIL的Image对象
##
# @return     { description_of_the_return_value }
##


def showInfo(imObject):
    if str(type(imObject)) == "<class 'PIL.JpegImagePlugin.JpegImageFile'>":
        print('%s-%s 长宽:(%s,%s)' % (imObject.format, imObject.mode, imObject.size[0], imObject.size[1]))
        return 1


##
# @brief      分别给出字体，行高，打印坐标，颜色，将数据打印到背景上 #
#
# @param      new_im      底图     image_object
# @param      data        数据     list
# @param      font        子图对象   font_object
# @param      heigh_line  行高
# @param      xy          打印位置   [x,y] #
# @param      color       背景颜色（元祖）
# @param      test        是否预览（布尔值）
# @param      font_size  字体大小   int
#
# @return     { description_of_the_return_value } #
#


def createIm(new_im, data, font, heigh_line, xy=[0, 0], color=(0, 0, 0), test=0):
    x = xy[0]
    y = xy[1]
    if isinstance(data, list):
        for input_text in data:
            ImageDraw.Draw(new_im).text(xy=(x, y), text=input_text, font=font, fill=color)
            y += heigh_line
    elif isinstance(data, str):
        ImageDraw.Draw(new_im).text(xy=(x, y), text=data, font=font, fill=color)
    if test:
        new_im.show()
    return 0


##
# @brief      将元素拼接到底图
##
# @param      tar_im  要拼接的元素
# @param      bg_im   底图对象
# @param      xy      拼接的起始坐标(x,y)/(sx,sy,ex,ey)
# @param      size    元素的比例
##
# @return     布尔值
##
def imMerge(tar_im, bg_im, xy, size=1, test=0):
    size_tips = 1
    bg_im.paste(tar_im, xy)
    if test:
        bg_im.show()
    return 0

if __name__ == '__main__':
    票价 = 131
    日期 = '2020年6月4日'

    # 获取外部参数
    # for e in range(1,len(sys.argv)):
    #     if(e==1):
    #         票价 = int(sys.argv[e])

    #     if(e==2):
    #         日期 = str(sys.argv[e])

    if len(sys.argv) == 2:
        input_price = input('输入金额(例: 28)(当前已获取：' + str(sys.argv[1]) + ')')
        if input_price == "":
            票价 = int(sys.argv[1])
        else:
            票价 = int(input_price)

        input_date = input('输入日期(例: 2020年4月15日)')
        if input_date == "" and len(sys.argv) > 2:
            日期 = sys.argv[2]
        else:
            日期 = input_date

    # 5号发票总价 出现问题
    currt_index = 10  # 单独输出某个
    pre = 0  # 生成预览
    test_mode = 0  # 最终成果预览

    # 创建发票对象
    res = main.Bill(票价, 日期)

    # 导入配置
    conf = config.config

    # 导入底图
    bg_im = Image.open('./src/background.jpg')

    if test_mode:
         # 背景颜色
        font_color = (0, 255, 255)

        # 设置字体(类型)
        f_type = conf['发票配置'][currt_index]["字体类型"]
        # 设置字体(大小)
        font = ImageFont.truetype(conf["字体路径"][f_type], conf['发票配置'][currt_index]["字体大小"])

        # 获取数据
        data = res.info[conf['发票配置'][currt_index]["name"]]

        # 创建底图
        new_im = Image.new("RGB", conf['发票配置'][currt_index]["创建范围"], font_color)

        # 创建文字并和底图合并
        createIm(new_im, data, font, conf['发票配置'][currt_index]["行高"], conf['发票配置'][currt_index]["起始坐标"], test=pre)

        # 跟底图进行合并
        imMerge(new_im, bg_im, conf['发票配置'][currt_index]["粘贴范围"], test=test_mode)

    else:
        font_color = (255, 255, 255)  # 背景颜色

        for tar in conf["发票配置"]:
            # 设置字体(类型)
            f_type = tar["字体类型"]
            # 设置字体(大小)
            font = ImageFont.truetype(conf["字体路径"][f_type], tar["字体大小"])

            # 获取数据
            data = res.info[tar["name"]]

            # 创建底图
            new_im = Image.new("RGB", tar["创建范围"], font_color)

            # 创建文字并和底图合并
            createIm(new_im, data, font, tar["行高"], tar["起始坐标"], test=pre)

            # 跟底图进行合并
            imMerge(new_im, bg_im, tar["粘贴范围"], test=0)

        # 保存文件
        save_name = os.getcwd() + '/' + str(票价) + '_' + str(日期) + '.jpg'
        bg_im.save(save_name, 'jpeg')
